﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace GestorDeFlotasDesktop.RegistrarViaje
{
    public partial class RegistrarViajes : MasterPage
    {
        DataTable clientes;
        DataTable choferes;
        DataTable turnos;
        DataTable viajesErrores;
        ArrayList array = new ArrayList();
        Form ventanPadre;
        public capaDatos.SQLSyntaxisGeneration viajesCD = new capaDatos.SQLSyntaxisGeneration();
        public RegistrarViajes(Form ventanaParam)
        {
            InitializeComponent();
            ocultarMenu(ref ventanPadre, ventanaParam);
            label10.Visible = false;
            comboBox2.Visible = false;
        }

        private void RegistrarViajes_Load(object sender, EventArgs e)
        {
            comboBox1.Text = "";
            comboBox2.Text = "";
            comboBox6.Text = "";
            comboBox3.Text = "";
            textBox4.Text = "";
            fecha.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";
            monthCalendar1.Visible = false;
            cargarTiposViaje();
            cargarClientes();
            cargarChoferes();
            label10.Visible = false;
            comboBox2.Visible = false;
        }

        private void RegistrarViajes_FormClosing(object sender, FormClosingEventArgs e)
        {
            ventanPadre.Visible = true;
        }

        private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
        {
            fecha.Text = e.Start.ToShortDateString();
         
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if(!monthCalendar1.Visible)
                monthCalendar1.Visible = true;
            else
                monthCalendar1.Visible = false;
        }

       

        private void cargarTurnos(string IDchofer)
        {

          string query= "select distinct t.descripcionTurno,t.idTurno,t.horaInicioTurno,t.horaFinTurno from PELUSA.turno t,PELUSA.choferes_taxis ct where";
          query+=" t.idTurno=ct.idTurno and activoturno=1 and ct.idChofer=" + IDchofer;
            //sólo se cargan los turnos correspondientes al chofer seleccionado anteriormente y que se encuentren habilitados/activos.
            turnos = viajesCD.executeQuery(query);
            
            comboBox1.DataSource = turnos;
           comboBox1.DisplayMember = turnos.Columns[0].ColumnName;
           comboBox1.Text = "";

        }
        private void cargarTiposViaje()
        {
            
            string[] viajes = new string[] { "Viaje programado", "Viaje en calle" };
            comboBox6.DataSource = viajes;
            comboBox6.Text = "";

        }
        private void cargarClientes()
        {
            
            string query = "select cast(idCliente as varchar) + ' - ' + nombreCliente + ', '+ apellidoCliente + ' - ' + cast(telefonoCliente as varchar), idCliente";
            query+=" from PELUSA.clientes where activoCliente=1 order by idCliente";
           //un cliente sólo se carga en el combo si está habilitado
            clientes = viajesCD.executeQuery(query);
            comboBox2.MaximumSize = GetPreferredSize(new Size(274,clientes.Rows.Count));
            comboBox2.DataSource = clientes;
            comboBox2.DisplayMember = clientes.Columns[0].ColumnName;
            comboBox2.Text = "";

           

        }
        private void cargarChoferes()
        {
            string query = "select distinct cast(c.idChofer as varchar) + ' - ' + c.nombreChofer + ', '+ c.apellidoChofer + ' - ' + cast(c.dniChofer as varchar), c.idChofer";
            query += " from PELUSA.chofer c,PELUSA.choferes_taxis ct,Pelusa.taxis t,Pelusa.reloj r where activoChofer=1 and c.idChofer=ct.idChofer and ";
            query+= "ct.idTaxi= t.idTaxi and t.relojTaxi = r.idReloj and r.activoReloj=1 and t.activoTaxi=1 order by idChofer";
            //un chofer es cargado en el combo sólo si él está habilitado, su taxi esta habilitado y el reloj de su taxi está habilitado
            choferes = viajesCD.executeQuery(query);
            comboBox3.MaximumSize = GetPreferredSize(new Size(274, choferes.Rows.Count));
            comboBox3.DataSource = choferes;
            comboBox3.DisplayMember = choferes.Columns[0].ColumnName;
            comboBox3.Text = "";

        }

        private void comboBox6_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox6.SelectedItem != null)
            {
                if (Convert.ToString(comboBox6.SelectedItem) != "Viaje en calle")
                {
                    label10.Visible = true;
                    comboBox2.Visible = true;
                    
                }
                else {

                    label10.Visible = false;
                    comboBox2.Visible = false;
                
                }
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            comboBox1.Text = "";
            comboBox2.Text = "";
            comboBox6.Text = "";
            comboBox3.Text = "";
            textBox4.Text = "";
            fecha.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";
        }

        private void btAlta_Click(object sender, EventArgs e)
        {
            
            if (comboBox1.Text == "" || (comboBox2.Text == "" && comboBox2.Visible)|| comboBox6.Text == "" || comboBox3.Text == "" || textBox4.Text == "" || fecha.Text == "" || textBox5.Text == "" || textBox6.Text == "")
            {
                MessageBox.Show("Todos los campos son obligatorios.Por favor, complete los campos faltantes.", "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            }
            else
            {
                if ((Convert.ToInt32(textBox5.Text) > 23) || (Convert.ToInt32(textBox6.Text) > 59))
                {

                    MessageBox.Show("Ha ingresado un formato inválido de hora/minuto: Formato válido = h o hh y m o mm", "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
                else if ((Convert.ToInt32(textBox5.Text) < Convert.ToInt32(turnos.Rows[comboBox6.SelectedIndex].ItemArray[2])) || (Convert.ToInt32(textBox5.Text) > Convert.ToInt32(turnos.Rows[comboBox6.SelectedIndex].ItemArray[3])))
                {
                    MessageBox.Show("Ha ingresado un horario de viaje fuera del rango del turno seleccionado. Ingrese un horario válido o modifique el turno seleccionado", "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    int tipo;
                    string hora, minuto, mes, dia;
                    if (Convert.ToString(comboBox1.SelectedItem) == "Viaje programado")
                        tipo = 1;
                    else
                        tipo = 0;

                    if (Convert.ToInt32(textBox5.Text) < 10)
                        hora = "0" + textBox5.Text;
                    else
                        hora = textBox5.Text;
                    if (Convert.ToInt32(textBox6.Text) < 10)
                        minuto = "0" + textBox6.Text;
                    else
                        minuto = textBox6.Text;
                    if (Convert.ToInt32(monthCalendar1.SelectionStart.Month) < 10)
                        mes = "0" + monthCalendar1.SelectionStart.Month.ToString();
                    else
                        mes = monthCalendar1.SelectionStart.Month.ToString();
                    if (Convert.ToInt32(monthCalendar1.SelectionStart.Day) < 10)
                        dia = "0" + monthCalendar1.SelectionStart.Day.ToString();
                    else
                        dia = monthCalendar1.SelectionStart.Day.ToString();

                    int idchofer = Convert.ToInt32(choferes.Rows[comboBox3.SelectedIndex].ItemArray[1]);
                    int idcliente = Convert.ToInt32(clientes.Rows[comboBox2.SelectedIndex].ItemArray[1]);
                    int idturno = Convert.ToInt32(choferes.Rows[comboBox6.SelectedIndex].ItemArray[1]);
                    string fecha1 = monthCalendar1.SelectionStart.Year.ToString()  + mes ;
                    fecha1 += dia + " " + hora + ":" + minuto + ":00.000";

                    viajesErrores = viajesCD.executeSp("PELUSA.cargarViaje",parametrosStoredProcedure(  paramsNames("tipo", "fichas", "fecha", "idChofer", "idTurno", "idCliente"), paramsValues(tipo, Convert.ToInt32(textBox4.Text), fecha1, idchofer, idturno, idcliente)));
                    if (Convert.ToString(viajesErrores.Rows[0].ItemArray[0]) != "ok")
                    {
                        MessageBox.Show("No se han podido registrar los datos.: " + Convert.ToString(viajesErrores.Rows[0].ItemArray[0]), "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    }
                    else {

                        MessageBox.Show("El viaje ha sido registrado con éxito", "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    
                    }
                    comboBox1.Text = "";
                    comboBox2.Text = "";
                    comboBox6.Text = "";
                    comboBox3.Text = "";
                    textBox4.Text = "";
                    fecha.Text = "";
                    textBox5.Text = "";
                    textBox6.Text = "";
                    monthCalendar1.Visible = false;
                 
                    label10.Visible = false;
                    comboBox2.Visible = false;

                }
            }
        }

        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
           string chofer;
           if (choferes.Rows.Count != 0)
               chofer = Convert.ToString(choferes.Rows[comboBox3.SelectedIndex].ItemArray[1]);
           else 
               chofer = "";
            if (chofer != "System.Data.DataRowView"&& chofer!="")
            cargarTurnos(Convert.ToString(chofer));
        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {
            if (textBox5.Text != "")
            {
                int numero;
                bool resultado = int.TryParse(textBox5.Text, out numero);
                if (!resultado)
                { //si no consigue la conversión, valor inválido
                    textBox5.Text = "";
                    MessageBox.Show("Está ingresando un valor inválido. Este campo sólo admite valores numéricos enteros", "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
            }
        }

        private void textBox6_TextChanged(object sender, EventArgs e)
        {
            if (textBox6.Text != "")
            {
                int numero;
                bool resultado = int.TryParse(textBox6.Text, out numero);
                if (!resultado)
                { //si no consigue la conversión, valor inválido
                    textBox6.Text = "";
                    MessageBox.Show("Está ingresando un valor inválido. Este campo sólo admite valores numéricos enteros", "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
            }
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
            if (textBox4.Text != "")
            {
                int numero;
                bool resultado = int.TryParse(textBox4.Text, out numero);
                if (!resultado)
                { //si no consigue la conversión, valor inválido
                    textBox4.Text = "";
                    MessageBox.Show("Está ingresando un valor inválido. Este campo sólo admite valores numéricos enteros", "Registro de viajes", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
            }
        }
    }
}
